static void pit_timer_fn(void *data)
{
struct vmx_virpit_t *vpit = data;
- s_time_t next;
- int missed_ticks;
+ int missed_ticks;
missed_ticks = (NOW() - vpit->scheduled) / MILLISECS(vpit->period);
/* pick up missed timer tick */
if ( missed_ticks > 0 ) {
- vpit->pending_intr_nr+= missed_ticks;
+ vpit->pending_intr_nr += missed_ticks;
vpit->scheduled += missed_ticks * MILLISECS(vpit->period);
}
- next = vpit->scheduled + MILLISECS(vpit->period);
- set_ac_timer(&vpit->pit_timer, next);
- vpit->scheduled = next;
+ vpit->scheduled += MILLISECS(vpit->period);
+ set_ac_timer(&vpit->pit_timer, vpit->scheduled);
}
s_time_t get_s_time(void);
#define NOW() ((s_time_t)get_s_time())
-#define SECONDS(_s) (((s_time_t)(_s)) * 1000000000ULL )
-#define MILLISECS(_ms) (((s_time_t)(_ms)) * 1000000ULL )
-#define MICROSECS(_us) (((s_time_t)(_us)) * 1000ULL )
+#define SECONDS(_s) ((s_time_t)((_s) * 1000000000ULL))
+#define MILLISECS(_ms) ((s_time_t)((_ms) * 1000000ULL))
+#define MICROSECS(_us) ((s_time_t)((_us) * 1000ULL))
extern void update_dom_time(struct vcpu *v);
extern void do_settime(